package cn.tedu.em.user.webapi.controller;

import cn.tedu.em.common.pojo.user.dto.UserAddNewDTO;
import cn.tedu.em.common.pojo.user.dto.UserLoginDTO;
import cn.tedu.em.common.pojo.user.dto.UserUpdateDTO;
import cn.tedu.em.common.pojo.user.vo.UserListForAdminVO;
import cn.tedu.em.common.restful.JsonResult;
import cn.tedu.em.user.service.IUserService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@Slf4j
@RequestMapping("/users")
@Api(tags = "用户管理模块")
public class UserController {

    @Autowired
    IUserService userService;

    //http://localhost:9998/users/login
    @PostMapping("/login")
    @ApiOperation("用户登录")
    @ApiOperationSupport(order = 10)
    public JsonResult<String> login(UserLoginDTO userLoginDTO){
        log.debug("开始处理【用户登录】的请求, 参数: {}",userLoginDTO);
        String jwt = userService.loginUser(userLoginDTO);
        return JsonResult.ok(jwt);
    }

    @PostMapping("/add-new")
    @ApiOperation("新增用户")
    public JsonResult<Void> addNew(UserAddNewDTO userAddNewDTO){
        log.debug("开始处理新增用户的请求");
        userService.addNew(userAddNewDTO);
        return JsonResult.ok();
    }

    @PostMapping("/{id}/delete")
    @ApiOperation("根据id删除用户")
    public JsonResult<Void> deleteById(@PathVariable Long id){
        log.debug("开始处理根据id删除用户的请求");
        userService.deleteById(id);
        return JsonResult.ok();
    }

    @PostMapping("/update")
    @ApiOperation("修改用户信息")
    public JsonResult<Void> updateUserById(UserUpdateDTO userUpdateDTO){
        log.debug("开始处理修改用户信息的请求");
        userService.updateById(userUpdateDTO);
        return JsonResult.ok();
    }

    @GetMapping("/list")
    @ApiOperation("查询用户列表")
    public JsonResult<List<UserListForAdminVO>> list(){
        log.debug("开始处理查询用户列表的请求");
        List<UserListForAdminVO> list = userService.getUserList();
        return JsonResult.ok(list);
    }

}
